package com.principles.create.singleton;


// 确保一个类只有一个实例，而且自行实例化并向整个系统提供这个实例。使用：序号生成器，web页面的计数器等等

// 最佳实践是无状态的 用工具类等
/**
 * @Date: 10:17:02 2025-01-27
 * @Description:  单例模式
 */
public class Singleton {


    // 饿汉式 不存在线程安全问题
    private static Singleton singleton =new Singleton();



    /**
     * @Date: 18:48:33 2025-01-26
     * @Params: []
     * @Return: null
     * @Description: 构造方法 私有化构造方法，防止用户自己new实例
     */
    private Singleton(){

    }

    // 饿汉式
    public static Singleton getInstance(){
        return singleton;
    }


    // 懒汉式 在使用的时候实例化
    private volatile static Singleton singleton2 =new Singleton();

    // 加锁 防止高并发时候多次创建
    public  static Singleton getInstance2(){
        if(singleton2==null){
            synchronized(singleton2){
                if(singleton2==null){
                    singleton2 = new Singleton();
                }
            }
        }
        return singleton;
    }
    /*
        饿汉式：
        懒汉式：
        双重检查锁
     */

}
